home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.1 (Developer) [x86] / NeXT Step 3.1 Intel dev.cdr.dmg / NextDeveloper / Examples / IndexingKit / ToDoList / FindPanel.m < prev    next >
Encoding:
Text File  |  1993-02-16  |  3.6 KB  |  172 lines

  1. /*
  2. FindPanel.m - Copyright (c) 1992 NeXT Computer, Inc.
  3.  
  4. You may freely copy, distribute and reuse the code in this example.
  5. NeXT Computer, Inc. disclaims any warranty of any kind, expressed or implied, 
  6. as to its fitness for any particular use.
  7. */
  8.  
  9. #import    "FindPanel.h"
  10. #import    "MainDelegate.h"
  11. #import    "QueryFieldEditor.h"
  12.  
  13. @implementation FindPanel
  14.  
  15. - ping:sender
  16. {
  17.     [browser setDelegate:self];
  18.     [browser setTarget:self];
  19.     [browser setAction:@selector(browserHit:)];
  20.     [findField setStringValue:""];
  21.     [findField selectText:self];
  22.     return self;
  23. }
  24.  
  25. - makeKeyAndOrderFront:sender
  26. {
  27.     [self ping:sender];
  28.     [super makeKeyAndOrderFront:sender];
  29.     return self;
  30. }
  31.  
  32. - takeStringValueFrom:sender
  33. {
  34.     [findField setStringValue:[sender stringValue]];
  35.     return self;
  36. }
  37.  
  38. - performFind:sender
  39. {
  40.     [findButton performClick:sender];
  41.     return self;
  42. }
  43.  
  44. - findPostings
  45. {
  46.     char        *theText;
  47.     char        *theExpression;
  48.     id            theQuery;
  49.     IXPostingList    *postingList;
  50.     IXRecordManager    *recordManager;
  51.  
  52.     // get the text from the form
  53.     theText = (char *)[findField stringValue]; 
  54.     theExpression = alloca(MAXPATHLEN); 
  55.  
  56.     //  generate a query expression
  57.     sprintf(theExpression, "whole(%s parse(%s))", "TheContent", theText);
  58.  
  59.     // create a query object. the parser is the same as the one on the attribute.
  60.     recordManager = (IXRecordManager *)[[NXApp delegate] recordManager];
  61.     theQuery = [[IXAttributeQuery alloc] initQueryString:theExpression 
  62.     andAttributeParser:[recordManager parserForAttributeNamed:"TheContent"]];
  63.  
  64.     // perform query
  65.     postingList = [theQuery evaluateFor:recordManager];
  66.  
  67.     // find all discarded records
  68.     if (postingSet) postingSet = [postingSet free];
  69.     postingSet = [[IXPostingSet alloc] initWithPostingsIn:postingList];
  70.     [postingList free]; 
  71.     if (postingList = [recordManager discards])
  72.     {
  73.     [postingSet subtractPostingsIn:postingList];
  74.     [postingList free]; 
  75.     }
  76.  
  77.     return self;
  78. }
  79.  
  80. - doFind:sender
  81. {
  82.     [self findPostings];
  83.     [browser loadColumnZero];
  84.     [findField selectText:self];
  85.     return self;
  86. }
  87.  
  88. - doRefine:sender
  89. {
  90.     IXPostingSet    *original;
  91.  
  92.     original = nil;
  93.     if (postingSet)
  94.     {
  95.     original = postingSet;
  96.     postingSet = nil;
  97.     }
  98.  
  99.     [self findPostings];
  100.     if (original)
  101.     {
  102.     [postingSet formIntersectionWithPostingsIn:original];
  103.     [original free];
  104.     }
  105.  
  106.     [browser loadColumnZero];
  107.     [findField selectText:self];
  108.     return self;
  109. }
  110.  
  111. - browserHit:sender
  112. {
  113.     [[NXApp delegate] dateDidChange:[[browser matrixInColumn:0] selectedCell]];
  114.     return self;
  115. }
  116.  
  117. - (int)browser:b fillMatrix:m inColumn:(int)c
  118. {
  119.     int            count;
  120.     int            row;
  121.     char        *string;
  122.     IXRecordManager    *recordManager;
  123.     id            cell;
  124.  
  125.     if (b != browser) return 0;
  126.     recordManager = nil;
  127.     count = [postingSet count];
  128.     for (row = 0; row < count; row++)
  129.     {
  130.     if (!(cell = [m cellAt:row :0]))
  131.     {
  132.         [m insertRowAt:row];
  133.         cell = [m cellAt:row :0];
  134.     }
  135.  
  136.     if (!recordManager)
  137.         recordManager = (IXRecordManager *)[[NXApp delegate] recordManager];
  138.  
  139.     string = NULL;
  140.     [recordManager getStringValue:&string 
  141.         ofMessage:@selector(theDate) forRecord:[postingSet setPosition:row]];
  142.  
  143.     if (string)
  144.     {
  145.         [cell setLoaded:YES];
  146.         [cell setStringValue:string];
  147.         free(string);
  148.     }
  149.  
  150.     [cell setLeaf:YES];
  151.     }
  152.  
  153.     return count;
  154. }
  155.  
  156. - windowWillReturnFieldEditor:sender toObject:client
  157. {
  158.     id         recordManager;
  159.  
  160.     if (client != findField) return nil;
  161.     if (escapeEditor == nil)
  162.     {
  163.     escapeEditor = [[QueryFieldEditor alloc] init];
  164.     recordManager = (IXRecordManager *)[[NXApp delegate] recordManager];
  165.     [escapeEditor setCursor:[recordManager cursorForAttributeNamed:"TheContent"]];
  166.     }
  167.  
  168.     return escapeEditor;
  169. }
  170.  
  171. @end
  172.